perm filename COR11.PAL[SYS,HE] blob
sn#142396 filedate 1975-02-07 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .SBTTL PDP-11 correlation routine to simulate SPS-41
C00005 00003 save parameters for first window
C00007 00004
C00008 ENDMK
Cā;
.SBTTL PDP-11 correlation routine to simulate SPS-41
; save variables for windows
WIN1: 0 ;starting address of window
WIN2: 0
SCHR1: 0 ;starting byte of window (0-3)
SCHR2: 0
INC1: 0 ;byte increment to start of next line
INC2: 0
CNTLIN: 0 ;number of bytes per line of window
TOTAL: 0 ;number of bytes in window
; run variables
SPSDON: 0 ;dummy flag for SPS
SCR: 0 ;score accumulated here
LCNTR: 0 ;count left in current line
TCNTR: 0 ;count left in current window
STR1: 0 ;address of start of current line
STR2: 0
AD1: 0 ;address of current byte
AD2: 0
CHR1: 0 ;current byte number
CHR2: 0
VAL1: 0 ;contents of current byte
VAL2: 0
PARAMX: 0 ;pointer to parameter address
SAVR5: 0 ;save return pointer
.MACRO GETBYT ADR,POS,STR
MOV ADR,A ;macro to get the current byte - pick up address
MOV (A),B ; get word containing byte
MOV POS,LENG ; get byte position
SUB #3,LENG ; calculate proper shift
MUL #4,LENG
ASHC LENG,B ; right justify byte
BIC #177760,B ; clear rest of word
MOV B,STR ; and store byte
.ENDM
.MACRO NXTBYT ADR,POS,LAB
INC POS ;macro to update byte pointers - increment position
CMP #4,POS ; test for end of current word
BHI LAB
CLR POS ; end - clear position
ADD #2,ADR ; and update word pointer
LAB:
.ENDM
; save parameters for first window
FSTWIN: MOV (R5)+,A
ASL A
MOV (A)+,WIN1
ASL WIN1
MOV (A)+,SCHR1
MOV (A)+,INC1
ASL INC1
MOV (A)+,CNTLIN
MOV (A)+,TOTAL
RTS R5
; correlate first window with current window
NXTWIN: MOV (R5)+,A ; save parameters for this window
MOV R5,SAVR5
ASL A
MOV A,PARAMX ; save pointer to return score
MOV (A)+,WIN2
ASL WIN2
MOV (A)+,SCHR2
MOV (A)+,INC2
ASL INC2
CLR SCR ; initialize for outer loop
MOV WIN1,STR1
MOV WIN2,STR2
MOV TOTAL,TCNTR
LNLOP: MOV STR1,AD1 ; setup for start of line
MOV STR2,AD2
MOV SCHR1,CHR1
MOV SCHR2,CHR2
MOV CNTLIN,LCNTR
CHRLOP: GETBYT AD1,CHR1,VAL1 ; get next byte of each window
GETBYT AD2,CHR2,VAL2
MOV VAL1,LENG ; update sum of squares of differences
SUB VAL2,LENG
MUL LENG,LENG
ADD LENG,SCR
NXTBYT AD1,CHR1,L1X ; update byte pointers
NXTBYT AD2,CHR2,L2X
DEC TCNTR ; test for end of window
BLE GOUT
DEC LCNTR ; test for end of line
BGT CHRLOP
ADD INC1,STR1 ; update line address for next line
ADD INC2,STR2
BR LNLOP
GOUT: MOV PARAMX,A ; save score
MOV SCR,-(A)
; NUMDEC SCR ; type score
; CRLF
MOV SAVR5,R5
RTS R5
GRONK: RTS PC